import dateformat from 'dateformat'
import string from 'string'
import extend from 'extend'
import Store from 'store2'
import {getLodop} from './clodop/LodopFuncs'
import global from '../api/config'
import {http} from '../api/http'

export default {
  install (Vue, options) {
    /**
     * 日期格式化
     * https://www.npmjs.com/package/dateformat
     */
    // eslint-disable-next-line no-unused-expressions,no-sequences
    Vue.prototype.$dateformat = dateformat,

      /**
       * 字符串函数库
       * https://www.npmjs.com/package/string
       */
      Vue.prototype.$string = string,

      /**
       * 对象扩展
       * https://www.npmjs.com/package/extend
       */
      Vue.prototype.$extend = extend,
      /**
       * exportRows
       * 导出条数
       */
      Vue.prototype.$exportRows = function (data) {
        let result = 5000 // 默认5000
        if (data) {
          result = data
        }
        return result
      },
      /**
       * setOptimization
       * vxe-table的优化配置项
       */
      Vue.prototype.$setOptimization = function (msg) {
        // 默认 数据超过200条，启用虚拟加载，每次加载50条
        let result = {animat: false, scrollY: {gt: 200, oSize: 20, rSize: 50}}
        switch (msg) {
          case 'list':
            // 采样记录-- 数据超过25条启用虚拟加载
            result = {animat: false, scrollY: {gt: 25, oSize: 10, rSize: 25}}
            break
          case 40:
            // list-- 数据超过40条启用虚拟加载
            result = {animat: false, scrollY: {gt: msg, oSize: 16, rSize: 30}}
            break
        }
        return result
      },
      /**
       * setOptimization
       * vxe-table的编辑
       */
      Vue.prototype.$selectConfig = function (msg) {
        let result = {checkField: 'checked', trigger: 'row'}
        switch (msg) {
          case 'no-check':
            // 采样记录--不需要选择前面的checbox
            result = {checkField: 'checked'}
            break
        }
        return result
      },
      /**
       * edit-render 模板
       *
       * vxe-table的编辑
       */
      Vue.prototype.$isEditRender = function (data) {
        if (data === 'input') {
          // input框编辑，聚焦
          return {autofocus: 'input'}
        } else if (data === 'default') {
          // 除了input框其他的编辑
          return {type: 'default'}
        } else {
          // 不可编辑
          return {type: 'visible'}
        }
      },
      /**
       * table 分页
       */
      Vue.prototype.$pageSizeOpts = [20, 50, 100, 200],
      /**
       * 判断操作系统
       */
      Vue.prototype.$platform = function () {
        let isWin = false
        if (navigator.platform === 'Win32' || navigator.platform === 'Windows') {
          isWin = true
        }
        return isWin
      },
      /**
       * 判断内容是否为空
       */
      Vue.prototype.$isEmpty = function (data) {
        let result = false
        if (data === 'undefined' || data === undefined || data === null || data === 'null' || data === '') {
          result = false
        } else {
          result = true
        }
        return result
      },
      /**
       *引用打印机js
       */
      Vue.prototype.$getLodop = getLodop,

    /**
     * optColWidth(表格列的宽度)
     * listLength--- 操作列按钮数组
     */
    Vue.prototype.$optColWidth = function (list) {
      let arrayList = []
      let width = 20
      for (let i in list) {
        if (this.$showBtn(list[i].id)) {
          arrayList.push(list[i])
        }
      }
      return arrayList.length > 0 ? (87 + width * (arrayList.length - 1)) : 0
    }
    /**
     * btn-list
     * list -数组
     * showBtnNum - 需要显示几个按钮
     */
    Vue.prototype.$showBtnListTemp = function (list, showBtnNum) {
      let obj = {
        num: 0,
        msgTemp: [], // 有权限的按钮数组
        isDropDown: -1,
        maxNum: 0
      }
      let msgTemp = []
      // 若定制了button的个数，则用定制的，否则默认显示9个
      obj.num = showBtnNum !== undefined ? showBtnNum : 9
      if (list !== undefined && list.length > 0) {
        // 存在按钮权限的时候

        for (let i = 0; i < list.length; i++) {
          if (this.$showBtn(list[i].id)) {
            msgTemp.push(list[i])
          }
        }
        obj.msgTemp = msgTemp

        if (obj.msgTemp.length > obj.num) {
          obj.isDropDown = 0
          obj.maxNum = obj.num
        } else if (obj.msgTemp.length === obj.num) {
          obj.isDropDown = -1
          obj.maxNum = obj.num
        } else {
          obj.isDropDown = -1
          obj.maxNum = obj.num - 1
        }
      } else {
        obj.msgTemp = []
        obj.isDropDown = -1
        obj.maxNum = 0
        obj.num = 0
      }
      return obj
    }
    /**
     * 根据查询条件导出或者根据勾选导出
     *  param：id要传的参数
     *  ids: 勾选的id
     *  url:下载的地址
     *  queryObj: 查询条件
     *  method: get,post
     *  msgContent: 提示的消息内容
     *  temp=0：参数无效，但是需要保留
     *  extendObj 额外传的参数
     */
    Vue.prototype.$exportByQuery = function (paramObj, extendObj) {
      let obj = {}
      let uri = ''
      switch (paramObj.url.indexOf(global.uReport)) {
        case -1:
          // post方法
          if (paramObj.ids.length > 0) {
            obj[paramObj.param] = paramObj.ids.join(',')
          } else {
            Object.assign(obj, paramObj.queryObj)
          }
          // 传contractId等额外参数
          if (extendObj) {
            Object.assign(obj, extendObj)
          }
          this.$Modal.confirm({
            title: '提示',
            content: paramObj.msgContent ? paramObj.msgContent : '确定要导出数据？',
            onOk: () => {
              console.log('1111====', paramObj.url, this.$serializeFormSearch(obj))
              http.open(paramObj.url, this.$serializeFormSearch(obj), '_blank')
            }
          })
          break
        default:
          // 说明是ureport报表(只能是get）
          if (paramObj.ids.length > 0) {
            uri = '&' + paramObj.param + '=' + paramObj.ids.join(',')
          } else {
            for (let m in paramObj.queryObj) {
              uri += '&' + m + '=' + paramObj.queryObj[m]
            }
          }
          this.$Modal.confirm({
            title: '提示',
            content: paramObj.msgContent ? paramObj.msgContent : '确定要导出数据？',
            onOk: () => {
              window.open(this.$judgeUrlChar(paramObj.url) + 'temp=0' + uri)
            }
          })
      }
    }
    /**
     *搜索条件清空缓存处理方式(form表单序列化 查询)
     *
     */
    Vue.prototype.$serializeFormSearch = function (formObj) {
      let newFormObj = {}
      for (let key in formObj) {
        // 不为空的时候传值
        if (formObj[key] !== '' && formObj[key] !== undefined) {
          newFormObj[key] = formObj[key]
        }
      }
      return newFormObj
    }
    /**
     *数组转换成字符串
     *
     */
    Vue.prototype.$arrayToString = function (arrayObj) {
      let array = []
      for (let i = 0; i < arrayObj.length; i++) {
        array.push(arrayObj[i].name)
      }
      return array.join(',')
    }

    /***
     *生成四位随机数 四个字母+时间戳
     * */
    Vue.prototype.$randomCode = function () {
      let code = ''
      let random = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
      // 循环codeLength 我设置的4就是循环4次
      for (let i = 0; i < 4; i++) {
        // 设置随机数范围,这设置为0 ~ 26
        let index = Math.floor(Math.random() * 26)
        // 字符串拼接 将每次随机的字符 进行拼接
        code += random[index]
      }
      // 为避免重复  改为时间戳+四个随机数
      return code + new Date().getTime()
    }

    /**
     * 清空对象key的值
     * */
    Vue.prototype.$resetFields = function (formObj) {
      for (let key in formObj) {
        formObj[key] = ''
      }
      return formObj
    }
    /**
     * 编辑时给formObj赋值，未定义的设为空
     *
     */
    Vue.prototype.$setForm = function (newFormObj, formObj) {
      for (let key in newFormObj) {
        if (formObj[key] !== undefined) {
          newFormObj[key] = formObj[key]
        } else {
          newFormObj[key] = ''
        }
      }
      return newFormObj
    }
    /**
     * 判断url是否有?号
     * */
    Vue.prototype.$judgeUrlChar = function (url) {
      let result = ''
      if (url.indexOf('?') !== -1) {
        // 存在?，用&拼接
        result = '&'
      } else {
        // 不存？，用？拼接
        result = '?'
      }
      return url + result
    }
    /**
     * 判断计算费用----保存两位小数(委托用)
     * */
    Vue.prototype.$amountSum = function (data) {
      let result = 0
      for (let i = 0; i < data.length; i++) {
        result = result + (data[i] ? data[i] : 0)
      }
      return Number(result.toFixed(2))
    }
    /**
     * 类别判断（编辑的时候不能选择相同的类别，根据ID判断）
     * {id:'',classifyId:''} // 行id,与类别id
     * */
    Vue.prototype.$judgeClassify = function (data) {
      let result = false
      if (data.classifyId) {
        // 上级类别存在的情况
        if (data.id === data.classifyId) {
          result = false // 重复
        } else {
          result = true // 不重复
        }
      } else {
        // 上级类别不存在的情况
        result = true
      }
      return result
    }
    /**
     * 按钮授权
     *
     */
    Vue.prototype.$showBtn = function (id) {
      if (id === '') {
        // 不添加权限
        return true
      }
      let result = false
      let showBtnList = global.getCommonInfo('showBtnList')
      const list = showBtnList || []
      const l = list.length
      if (l > 0) {
        // 添加权限
        for (let i = 0; i < l; i++) {
          if (list[i] === id) {
            result = true
          }
        }
      }
      return result
    }
    /**
     * 消息提示
     * type:消息类型，success,warning等
     * cont:消息内容
     */
    Vue.prototype.$msgTip = function (type, cont) {
      return this.$Message[type]({
        content: cont || (type === 'warning' ? '请至少选择一条数据！' : '操作成功！'),
        duration: 3 // 3s后将关闭
      })
    }

    /**
     *
     * table高度
     *
     */
    Vue.prototype.$tableHeight = function (name, cutHeight) {
      let height = 300
      if (name) {
        switch (name) {
          case 'search':/* 有按钮和查询条件 */
            height = document.documentElement.clientHeight - 268
            break
          case 'noSearch':/* 有按钮和无查询条件 */
            height = document.documentElement.clientHeight - 215
            break
          case 'tabSearch':/* 有tab有按钮和有查询条件 */
            height = document.documentElement.clientHeight - 317
            break
          case 'tabNoSearch':/* 有tab有按钮和无查询条件 */
            height = document.documentElement.clientHeight - 260
            break
          case 'noBtn':/* 有查询条件没有按钮 */
            height = document.documentElement.clientHeight - 220
            break
          case 'tabNoBtn':/* 有查询条件有tab没有按钮 */
            height = document.documentElement.clientHeight - 265
            break
          case 'searchTwo':/* 有按钮和查询条件（两行查询条件） */
            height = document.documentElement.clientHeight - 300
            break
          case 'searchThree':/* 有按钮和查询条件（三行查询条件） */
            height = document.documentElement.clientHeight - 370
            break
          case 'searchTwoNoBtn':/* 无按钮，有查询条件（两行查询条件） */
            height = document.documentElement.clientHeight - 300
            break
          case 'tabSearchTwoNoBtn':/* 无按钮,有tab,有查询条件（两行查询条件） */
            height = document.documentElement.clientHeight - 300
            break
          case 'tabSearchTwo':/* 有按钮、tab和查询条件（两行查询条件） */
            height = document.documentElement.clientHeight - 345
            break
          case 'tableModal':/* 弹出框中table高度（自适应屏幕高度） */
            height = document.documentElement.clientHeight - 340
            break
          case 'tableDetail':/* table详情高度（自适应屏幕高度） */
            height = document.documentElement.clientHeight - 180 + 'px'
            break
          case 'tabSearchThird':/* 有按钮、tab和查询条件（三行查询条件） */
            height = document.documentElement.clientHeight - 450
            break
        }
      } else if (cutHeight !== undefined) {
        height = document.documentElement.clientHeight - cutHeight
      }
      return height
    }
    /**
     * 面包屑数组
     *
     */
    Vue.prototype.$showBread = function () {
      return Store.session('crumbsArray')
    }
    /**
     * 数组中包括某个元素--样品状态(目前是暂停，中止)
     *
     */
    Vue.prototype.$showSampleStatus = function (arr, statusArr) {
      let result = false
      statusArr.forEach(function (statusValue, statusIndex, statusArray) {
        arr.forEach(function (value, index, array) {
          if (array[index].status.value === statusValue) {
            result = true
          }
        })
      })
      return result
    }
    /**
     * 处理undefined
     *
     */
    Vue.prototype.$handleCityList = function (list) {
      for (let i in list) {
        if (list[i] === undefined || list[i] === 'undefined' || list[i] === '' || list[i] === null) {
          list[i] = ''
        }
      }
      return list
    }
    /**
     * 数组中包括某个元素--统计中委托状态
     *
     */
    Vue.prototype.$showStatus = function (arr, currentIndex) {
      let result = false
      arr.forEach(function (value, index, array) {
        if (array[index] === currentIndex) {
          result = true
        }
      })
      return result
    }
    /**
     * tab对应的菜单
     *
     */
    Vue.prototype.$getTabMenu = function (list, name) {
      let result = []
      list.forEach(function (value, index, array) {
        if (array[index].code === name) {
          result = array[index]
        }
      })
      return result
    }
    /**
     * 数组去重-(根据传过来的条件进行去重)
     * arr --- 数组
     *item --- 条件（可以是id也可以是名字等等）
     */
    Vue.prototype.$uniqueArrayItem = function (arr, item) {
      for (var i = 0; i < arr.length - 1; i++) {
        let arri = arr[i]
        for (var j = i + 1; j < arr.length; j++) {
          let arrj = arr[j]
          if (arri[item] === arrj[item]) {
            arr.splice(j, 1)
            j--
          }
        }
      }
      return arr
    }
    /**
     * 数组去重-(根据传过来的条件进行去重)
     * arr --- 数组
     *item --- 条件（可以是id也可以是名字等等）=======================临时存在
     */
    Vue.prototype.$uniqueArrayItemTemp = function (arr) {
      for (var i = 0; i < arr.length - 1; i++) {
        let arri = arr[i]
        for (var j = i + 1; j < arr.length; j++) {
          let arrj = arr[j]
          if (arri === arrj) {
            arr.splice(j, 1)
            j--
          }
        }
      }
      return arr
    }

    /**
     * 判断传过来的值是否在数组中存在
     *
     */
    Vue.prototype.$showArrayIndex = function (currentIndex, array, index) {
      let result = true
      if (array.length === 0) {
        result = true
      } else {
        if ((array.indexOf(currentIndex) === -1) && (currentIndex === index)) {
          // 不存在
          result = true
        } else if ((array.indexOf(currentIndex) !== -1) && (currentIndex === index)) {
          // 存在
          result = false
        }
      }
      return result
    }
    /**
     * 找出数组中重复数据
     *
     */
    Vue.prototype.$duplicates = function (arr) {
      let newArr = []
      let array = []
      for (let k = 0; k < arr.length; k++) {
        array.push(arr[k].name)
      }
      array.sort()
      for (let i = 0; i < array.length; i++) {
        if (array[i] === array[i + 1] && (newArr.indexOf(array[i]) === -1)) {
          newArr.push(array[i])
          i++
        }
      }
      return newArr
    }
    /**
     * 返回天数
     *
     */
    Vue.prototype.$warningDay = function (date) {
      const stime = date
      const etime = new Date().getTime()
      // 两个时间戳相差的毫秒数
      const usedTime = stime - etime
      // 天数
      const iDays = Math.floor(usedTime / (24 * 60 * 60 * 1000))
      // 小时
      if (iDays < 1) {
        // 不到一天，则提示’不足1小时‘
        return '不足1天'
      } else {
        return iDays + ' 天'
      }
    }
    /**
     * 返回警告数值（委托--应出报告日期与当前日期相比）
     *
     */
    Vue.prototype.$warningValue = function (dueDate) {
      // sDate1和sDate2是2018-12-18格式
      let sDueDate = this.$dateformat(dueDate, 'yyyy-mm-dd')
      let sNewDate = this.$dateformat(new Date(), 'yyyy-mm-dd')
      let dateSpan, iDays
      sDueDate = Date.parse(sDueDate)
      sNewDate = Date.parse(sNewDate)
      dateSpan = sDueDate - sNewDate
      // dateSpan = Math.abs(dateSpan); //时间大的在前面（这里暂时不需要）
      iDays = Math.floor(dateSpan / (24 * 3600 * 1000))
      // 天数
      return iDays
    }
    /**
     * 返回警告数值（委托--计划完成时间与当前日期相比）
     *
     */
    Vue.prototype.$warningValueMin = function (dueDate) {
      // sDate1和sDate2是2018-12-18格式
      let sDueDate = this.$dateformat(dueDate, 'yyyy-mm-dd HH:MM')
      let sNewDate = this.$dateformat(new Date(), 'yyyy-mm-dd HH:MM')
      let dateSpan, iDays
      sDueDate = Date.parse(sDueDate)
      sNewDate = Date.parse(sNewDate)
      dateSpan = sDueDate - sNewDate
      // dateSpan = Math.abs(dateSpan); //时间大的在前面（这里暂时不需要）
      iDays = Math.floor(dateSpan / (24 * 3600 * 1000))
      // 天数
      return iDays
    }
    /**
     * 比较两个时间的大小
     *
     */
    Vue.prototype.$timeValue = function (beginDte, endDate) {
      // 开始时间与结束时间都存在的时候进行计算
      let result = 0
      if (beginDte && endDate) {
        let beginDteList = beginDte.split(':')
        let endDateList = endDate.split(':')
        let start = parseInt(beginDteList[0]) * 12 + beginDteList[1]
        let end = parseInt(endDateList[0]) * 12 + endDateList[1]
        result = end - start
      }
      return result
    }
    /**
     * 比较两个时间的大小---个人任务进度查询
     *  两个值为时间戳
     *  返回颜色class
     */
    Vue.prototype.$delDay = function (beginDate, endDate) {
      let beginDateTemp = beginDate ? this.$dateformat(beginDate, 'yyyy-mm-dd') : ''
      let endDateTemp = endDate ? this.$dateformat(endDate, 'yyyy-mm-dd') : ''
      let newDate = this.$dateformat(new Date(), 'yyyy-mm-dd')
      let days = 0
      if (endDateTemp) {
        // 如果计划完成时间存在
        if (beginDateTemp) {
          // 完成时间存在
          days = Math.floor((Date.parse(endDateTemp) - Date.parse(beginDateTemp)) / (24 * 3600 * 1000))
          if (days < 0) {
            // 红色
            return 'issue-bg-red'
          } else {
            // 绿色
            return 'issue-bg-green'
          }
        } else {
          // 完成时间不存在
          days = Math.floor((Date.parse(endDateTemp) - Date.parse(newDate)) / (24 * 3600 * 1000))
          if (days < 0) {
            // 红色
            return 'issue-bg-red'
          } else {
            // 白色
            return ''
          }
        }
      } else {
        return ''
      }
    }
    /**
     * 返回单元格颜色(table)
     *
     */
    Vue.prototype.$showTableCell = function (startTime, endTime) {
      let cellName = ''
      if (startTime === undefined) {
        cellName = ''
      } else if (endTime === undefined) {
        cellName = ''
      } else if (startTime > endTime) {
        // 计划时间大于完成时间
        cellName = 'success-cell'
      } else if (startTime < endTime) {
        // 计划时间小于完成时间
        cellName = 'warning-cell'
      } else {
        cellName = ''
      }
      return cellName
    }

    /**
     * 日期计算（项目调度）预计开始日期为第一天
     *
     */
    Vue.prototype.$showDate = function (date, val) {
      let resultTemp = date ? new Date(date) : ''
      let data = resultTemp.setDate(resultTemp.getDate() + val - 1)
      let result = new Date(dateformat(data, 'yyyy-mm-dd'))
      return result
    }
    /**
     * 日期计算（应出报告日期与数据出具日期）----合同项目计划管理中
     *  date 为日期类型（2019-03-10）----return 回去的也是日期类型
     */
    Vue.prototype.$showIssueDate = function (date, val, del) {
      let resultTemp = date ? new Date(date) : ''
      let data = ''
      let result = ''
      if (date) {
        if (del) {
          data = resultTemp.setDate(resultTemp.getDate() - val)
        } else {
          data = resultTemp.setDate(resultTemp.getDate() + val)
        }
        result = dateformat(data, 'yyyy-mm-dd')
      } else {
        result = ''
      }
      return result
    }
    /**
     * 生成随机数 n表示多少位(根据 dd HH:MM:ss)
     *
     */
    Vue.prototype.$mathRand = function (n) {
      let num = dateformat(new Date(), 'ddHHMMss')
      return num
    }
    /**
     * 设置名字（委托单位名称:cus-name、样品名称/标识:sample-name）
     *
     */
    Vue.prototype.$setModalTitle = function (msg, data) {
      switch (msg) {
        case 'cus-name':
          // 委托单位名称
          localStorage.setItem('cusName', data)
          break
        case 'sample-name':
          // 样品名称/标识
          localStorage.setItem('sampleName', data)
          break
      }
    }
    /**
     * 获取名字（委托单位名称:cus-name、样品名称/标识:sample-name）
     *
     */
    Vue.prototype.$getModalTitle = function (msg) {
      let result = ''
      switch (msg) {
        case 'cus-name':
          // 委托单位名称
          result = localStorage.getItem('cusName')
          break
        case 'sample-name':
          // 样品名称/标识
          result = localStorage.getItem('sampleName')
          break
      }
      return result
    }
    /**
     * 删除数组中的空值
     *
     */
    Vue.prototype.$filterArray = function (arr) {
      let newArr = []
      arr.forEach(item => {
        if (item) {
          newArr.push(item)
        }
      })
      return newArr
    }
    /**
     * 【新方式】
     * table 导出EXCEL（支持选中导出，支持查询导出，支持整个table导出）---
     *
     * id:table的id（暂时不用）,
     * title:导出的excel名字,
     * pageColumns:表头列
     * selectData：表格数据（可以是选中的，也可以是全部数据，若要导出全部数据则需执行page方法，page:1,rows:5000,最多导出5000条数据）
     *
     */
    Vue.prototype.$exportExcel = function (id, excelTitle, pageColumns, selectData) {
      // 导出表格的表头设置
      let allColumns = pageColumns
      var columnNames = []
      var columnValues = []
      for (var i = 0; i < allColumns.length; i++) {
        columnNames[i] = allColumns[i].title
        columnValues[i] = allColumns[i].key
      }
      require.ensure([], () => {
        const {export_json_to_excel} = require('vendor/Export2Excel')
        const tHeader = columnNames
        const filterVal = columnValues
        const list = JSON.parse(JSON.stringify(selectData))
        // 字段转换
        for (let j = 0; j < list.length; j++) {
          let selectDataIndex = list[j]
          for (let k = 0; k < pageColumns.length; k++) {
            let listKey = selectDataIndex[pageColumns[k].key]
            if (pageColumns[k].month) {
              // 日期格式化 --- yyyy-mm
              list[j][[pageColumns[k].key]] = listKey ? this.$dateformat(listKey, 'yyyy-mm') : ''
            } else if (pageColumns[k].date) {
              // 日期格式化 --- yyyy-mm-dd
              list[j][[pageColumns[k].key]] = listKey ? this.$dateformat(listKey, 'yyyy-mm-dd') : ''
            } else if (pageColumns[k].dateTime) {
              // 日期格式化 --- yyyy-mm-dd HH:MM:ss
              list[j][[pageColumns[k].key]] = listKey ? this.$dateformat(listKey, 'yyyy-mm-dd HH:MM:ss') : ''
            } else if (pageColumns[k].datetime) {
              // 日期格式化 --- yyyy-mm-dd HH:MM:ss
              list[j][[pageColumns[k].key]] = listKey ? this.$dateformat(listKey, 'yyyy-mm-dd HH:MM:ss') : ''
            } else if (pageColumns[k].dateTimeHM) {
              // 日期格式化 --- yyyy-mm-dd HH:MM
              list[j][[pageColumns[k].key]] = listKey ? this.$dateformat(listKey, 'yyyy-mm-dd HH:MM') : ''
            } else if (pageColumns[k].status) {
              // 状态
              list[j][[pageColumns[k].key]] = listKey === undefined ? '' : listKey.display
            } else if (pageColumns[k].tf) {
              // （t  or  f）
              list[j][[pageColumns[k].key]] = listKey === 'f' ? '否' : '是'
            } else if (pageColumns[k].lateOrder) {
              // 是否迟单
              list[j][[pageColumns[k].key]] = listKey === 1 ? '是' : '否'
            } else if (pageColumns[k].sampling) {
              // 采样或者送样
              list[j][[pageColumns[k].key]] = listKey === 1 ? '采样' : '送样'
            } else if (pageColumns[k].planMakeDeadline) {
              /** ***********************************项目进度部分-start**************************************************/
                // 项目进度---方案编制期限
              let planMakeDeadline = listKey ? this.$dateformat(listKey, 'yyyy/mm/dd') + '；' : ''
              let planMakeTime = (selectDataIndex['planMakeTime'] ? '完成时间：' + this.$dateformat(selectDataIndex['planMakeTime'], 'yyyy/mm/dd') + '；' : '')
              let planMaker = (selectDataIndex['planMaker'] ? '责任人：' + selectDataIndex['planMaker'] : '')
              list[j][[pageColumns[k].key]] = planMakeDeadline + planMakeTime + planMaker
            } else if (pageColumns[k].reviewDeadline) {
              // 项目进度---委托评审期限
              let reviewDeadline = listKey ? this.$dateformat(listKey, 'yyyy/mm/dd') + '；' : ''
              let reviewEndTime = (selectDataIndex['reviewEndTime'] ? '完成时间：' + this.$dateformat(selectDataIndex['reviewEndTime'], 'yyyy/mm/dd') + '；' : '')
              let reviewPerson = (selectDataIndex['reviewPerson'] ? '责任人：' + selectDataIndex['reviewPerson'] : '')
              list[j][[pageColumns[k].key]] = reviewDeadline + reviewEndTime + reviewPerson
            } else if (pageColumns[k].samplingDeadline) {
              // 项目进度---采样期限
              let samplingDeadline = listKey ? this.$dateformat(listKey, 'yyyy/mm/dd') + '；' : ''
              let samplingEndTime = (selectDataIndex['samplingEndTime'] ? '完成时间：' + this.$dateformat(selectDataIndex['samplingEndTime'], 'yyyy/mm/dd') + '；' : '')
              let samplingLeader = (selectDataIndex['samplingLeader'] ? '责任人：' + selectDataIndex['samplingLeader'] : '')
              list[j][[pageColumns[k].key]] = samplingDeadline + samplingEndTime + samplingLeader
            } else if (pageColumns[k].testDeadline) {
              // 项目进度---检测期限
              let testDeadline = listKey ? this.$dateformat(listKey, 'yyyy/mm/dd') + '；' : ''
              let testEndTime = (selectDataIndex['testEndTime'] ? '完成时间：' + this.$dateformat(selectDataIndex['testEndTime'], 'yyyy/mm/dd') + '；' : '')
              let testLeader = (selectDataIndex['testLeader'] ? '责任人：' + selectDataIndex['testLeader'] : '')
              list[j][[pageColumns[k].key]] = testDeadline + testEndTime + testLeader
            } else if (pageColumns[k].reportDeadline) {
              // 项目进度---报告编审期限
              let reportDeadline = listKey ? this.$dateformat(listKey, 'yyyy/mm/dd') + '；' : ''
              let reportEndTime = (selectDataIndex['reportEndTime'] ? '完成时间：' + this.$dateformat(selectDataIndex['reportEndTime'], 'yyyy/mm/dd') + '；' : '')
              let reportAuditer = (selectDataIndex['reportAuditer'] ? '责任人：' + selectDataIndex['reportAuditer'] : '')
              list[j][[pageColumns[k].key]] = reportDeadline + reportEndTime + reportAuditer
              /** ***********************************项目进度部分-end**************************************************/
            } else {
              list[j][[pageColumns[k].key]] = listKey === undefined ? '' : listKey
            }
          }
        }
        const data = this.$formatJson(filterVal, list)
        export_json_to_excel(tHeader, data, excelTitle)
        // 销毁导出提示
        setTimeout(() => {
          this.$Message.destroy()
        }, 1500)
      })
    }
    Vue.prototype.$formatJson = function (filterVal, jsonData) {
      return jsonData.map(v => filterVal.map(j => v[j]))
    }
    /**
     *将时间转换成时分秒等形式
     */
    Vue.prototype.$formatDateSecond = function (time) {
      // time 传过来时间戳

      let newTime = new Date().getTime()
      let cTime = new Date(time).getTime()
      let mss = newTime - cTime
      let days = parseInt(mss / (1000 * 60 * 60 * 24))
      let hours = parseInt((mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
      let minutes = parseInt((mss % (1000 * 60 * 60)) / (1000 * 60))
      let result = ''

      if (days === 0 && hours === 0 && minutes === 0) {
        result = '刚刚'
      } else if (days === 0 && hours === 0) {
        result = minutes + ' 分钟 之前'
      } else if (days === 0) {
        result = hours + ' 小时 ' + minutes + ' 分钟 之前'
      } else {
        result = days + ' 天 ' + hours + ' 小时 ' + minutes + ' 分钟 之前'
      }
      return result
    }

    /**
     *echart颜色
     *
     */
    Vue.prototype.$echartColor = ['#00a0e9', '#CD5555', '#fa8e19', '#fad819',
      '#ff7f50', '#87cefa', '#da70d6', '#32cd32', '#6495ed',
      '#ff69b4', '#ba55d3', '#cd5c5c', '#ffa500', '#40e0d0',
      '#1e90ff', '#ff6347', '#7b68ee', '#00fa9a', '#ffd700',
      '#6699FF', '#ff6666', '#3cb371', '#b8860b', '#30e0e0']

    /**
     * 注：企业的table列重新分配以后，用户个性化（或自定义的表格列）将清空。☆
     * table columns 用户自定义
     * pageColumns ------ 本地数据
     * userCodeList --- 获取用户的表格数据,若用户没有自定义过，则返回的是企业下的数据
     *
     */
    Vue.prototype.$tableColumns = function (pageColumns, userCodeList) {
      let userResult = []
      // 用户table数据
      for (let i = 0; i < pageColumns.length; i++) {
        userCodeList.map((item) => {
          if (item === pageColumns[i].key) {
            userResult.push(pageColumns[i])
          }
        })
      }
      return userResult
    }

    /**
     *表格默认行数
     *
     */
    Vue.prototype.$defRow = 50
    Vue.prototype.$defPageSizeOpts = [50, 100, 150, 200, 300]

    /**
     * base64转换成图片格式（png）
     *
     */
    Vue.prototype.$baseCharCode = function (urlData, type) {
      // 去掉url的头，并转换为byte   // 处理异常,将ascii码小于0的转换为大于0，type 为图片的名称
      const bytes = window.atob(urlData.split(',')[1])
      const ab = new ArrayBuffer(bytes.length)
      const ia = new Uint8Array(ab)
      for (let i = 0; i < bytes.length; i++) {
        ia[i] = bytes.charCodeAt(i)
      }
      return new Blob([ab], {type: type})
    }

    /**
     * 前端预览pdf
     * pdfObjectKey
     *
     */
    Vue.prototype.$pdfView = function (data) {
      if (data) {
        // 根据objectKey下载pdf
        let fileUrl = encodeURIComponent(global.baseURL + '/print/v1/download?objectKey=')
        let uri = global.staticURL + '/pdf/PDFJS/pdfjs/web/viewer.html?file=' + fileUrl + data
        return window.open(uri, '_blank')
      } else {
        this.$Message.warning('暂无PDF生成，不可预览~')
      }
    }
    /**
     *pdf 盖章字段颜色变化 根据VALUE的判断
     * 是-绿色；失败、否-红色；进行中-黑色
     */
    Vue.prototype.$signStatusColor = function (val, msg) {
      let color = ''
      let display = ''
      switch (val) {
        case 0:
          color = 'red-color'
          display = '否'
          break
        case 1:
          color = ''
          display = '进行中'
          break
        case 2:
          color = 'red-color'
          display = '失败'
          break
        case 3:
          color = 'green-color'
          display = '是'
          break
      }
      if (msg && msg === 'display') {
        return display
      } else {
        return color
      }
    }
    /**
     * 文件格式
     * param(img:是否为图片格式)
     */
    Vue.prototype.$fileFormat = function (type, param) {
      let res = ['doc', 'docx', 'txt', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'jpg', 'png', 'exif', 'bmp', 'tif', 'gif', 'jpeg']
      let imgList = ['jpg', 'png', 'exif', 'bmp', 'tif', 'gif', 'jpeg']
      if (param === 'img') {
        // 判断是否为图片
        if (imgList.indexOf(type.toLowerCase()) !== -1) {
          return true
        } else {
          return false
        }
      } else {
        // 返回文件格式
        if (res.indexOf(type.toLowerCase()) !== -1) {
          return type.toLowerCase()
        } else {
          return 'other'
        }
      }
    }
    /***
     * 报告管理报告剩余天数计算返回class值
     * **/
    Vue.prototype.$reportRemainDayClass = function (val, day) {
      if (val !== '') {
        if (val > day) {
          // 剩余时间大于给的天数
          return 'gray-color'
        }
        if (val < 0) {
          return 'red-color'
        }
        if (val >= 0 && val <= day) {
          return 'warning-color'
        }
      } else {
        return ''
      }
    }
    /**
     * 将经纬度转化为度分秒的格式
     * ****/
    Vue.prototype.$changeToDFM = function (du, type) {
      let duStr = du.toString()
      const arr1 = duStr.split('.')
      const d = arr1[0]
      let tp = '0.' + arr1[1]
      tp = String(tp * 60) // 这里进行了强制类型转换
      const arr2 = tp.split('.')
      const f = arr2[0]
      tp = '0.' + arr2[1]
      tp = tp * 60
      const m = tp
      const dfm = d + '°' + f + "'" + m + '"' + type
      return dfm
    }
    /***
     * 采样记录的bindUri 太长，需要存到cookie中去
     * name: 存的名字
     * second:几分钟以后失效
     * option : {ids:需要存的值，最多200条}
     * **/
    Vue.prototype.$bindUriSetCookie = function (name, second, option) {
      let ids = option.ids.join(',')
      let millisecond = new Date().getTime()
      let expiresTime = new Date(millisecond + 60 * 1000 * Number(second))
      console.log('cookie 到期时间==', this.$dateformat(expiresTime, 'yyyy-mm-dd HH:MM:ss'))
      document.cookie = name + '=' + encodeURIComponent(ids) + ';domain=' + global.domainURL + ';expires=' + expiresTime
    }
  }
}
